package fuction;

import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Predicate;

/**
 * Date: 2023-05-01
 * Time: 16:42
 */

/*
* 引用成员方法
* */

public class Demo3 {
    public static void main(String[] args) {
       /*
        方法引用（引用成员方法）
        格式
                其他类：其他类对象::方法名
                本类：this::方法名(引用处不能是静态方法)
                父类：super::方法名(引用处不能是静态方法)
        需求：
            集合中有一些名字，按照要求过滤数据
            数据："张无忌","周芷若","赵敏","张强","张三丰"
            要求：只要以张开头，而且名字是3个字的

       */

        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张无忌","周芷若","赵敏","张强","张三丰");

        //list.stream().filter(s->s.length()==3&&s.startsWith("张")).forEach(s-> System.out.println(s));


        // 匿名内部类
/*        list.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.length()==3&&s.startsWith("张");
            }
        }).forEach(s-> System.out.println(s));*/


        // 方法引用  其他类：其他类对象::方法名
        //list.stream().filter(new StringOperation()::stringJudge).forEach(s-> System.out.println(s));


        //本类 this报错  静态方法中没有this 替换为本类的对象  切记切记!!!!!
        list.stream().filter(new Demo3()::stringJudge).forEach(s-> System.out.println(s));

    }
    public boolean stringJudge(String s){
        return s.length()==3&&s.startsWith("张");
    }
}
